package com.shujia.day07.canshu;

public class Code09ParameterOperator {
    public static void main(String[] args) {
        /*
            形式参数：
                基本类型：
                    当你看到方法的参数是基本类型时，在调用方法时可以直接传入一个具体的值
                引用类型：
                    类：当你看到的参数是一个类时，那么就需要传入该类的对象进行做方法的调用
                    抽象类：当你看到的参数时一个抽象类时，那么可以使用其子类对象进行做参数的传递
                    接口：

            做方法调用时，看对应的参数，需要什么就给什么
         */

        // 如何调用show

        StudentTest studentTest = new StudentTest();
//        new Student2(); // 对于其中的方法并没有实现 所以直接new 对象会报错
        Student2Impl stuImpl = new Student2Impl(); // 创建其子类对象 并传入

        /*
            原因：
                1. Student2Impl 是 Student2的一个子类
                2. 可以使用多态将子类的对象指向父类的引用
                3. 通过这种多态转换，可以将对象转换成参数所需要的内容
         */
        Student2 student =  new Student2Impl();

        studentTest.show(student);

    }
}

abstract class Student2 {
    abstract public void fun();
}


class Student2Impl extends Student2 {

    @Override
    public void fun() {
        System.out.println("Student2Impl类中的fun");
    }
}

class StudentTest{
    // 当前传入的参数为一个抽象类
    public void show(Student2 student){
        student.fun();
    }
}
